using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SmartLink.DTOS;
using SmartLink.DTOS.Account;
using SmartLink.Domain;
using SmartLink.Domain.Entity;

namespace SmartLink.Application.IServices
{
    public interface IAccountAppServices
    {
        /// <summary>
        /// 登录
        /// </summary>
        Results<LoginResponseDTO> Login(LoginDTO model);

        /// <summary>
        /// 添加用户
        /// </summary>
        /// <param name="userModel"></param>
        /// <returns></returns>
        Results AddUser(AddUserDTO userModel);
        /// <summary>
        /// 修改用户
        /// </summary>
        /// <param name="registerUserInfo"></param>
        /// <returns></returns>
        Results UpdateUserBasicInfo(UserBasicInfoUpdateDTO registerUserInfo);
        /// <summary>
        /// 删除用户
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Results DeleteUser(int userId);
        /// <summary>
        /// 更新用户启用、禁用状态
        /// </summary>
        /// <param name="updateUserStatusDTO"></param>
        /// <returns></returns>
        Results UpdateUserStatus(UpdateUserStatusDTO updateUserStatusDTO);
        /// <summary>
        /// 获取用户下拉列表
        /// </summary>
        /// <param name="orgId"></param>
        /// <param name="isDept"></param>
        /// <returns></returns>
        Results<IEnumerable<UserSelectListItemDTO>> GetUserSelectList(int orgId, bool isDept);

        /// <summary>
        /// 分页查询用户
        /// </summary>
        /// <param name="userPagePara"></param>
        /// <returns></returns>
        Results<PageData<UserListItemDTO>> GetUserList(UserPagePara userPagePara, int curUserID);
        /// <summary>
        /// 账户修改密码
        /// </summary>
        /// <param name="modifyPwdDTO"></param>
        /// <returns></returns>
        Results ModifyPassword(PwdModifyDTO modifyPwdDTO, int curUserId);

        Results<bool> Logout(int userId);
        Results<UserRightsDto> GetUserAllRights(int userId);
        CurrentUserInfo GetCurrentUserInfo(int userId);
        /// <summary>
        /// 首次登陆强制修改密码
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        Results ForceUpdatePassword(string password);
        Results ResetPassword(int userId);
        Results<UserInfoDTO> GetUserInfo(int id);
        /// <summary>
        /// 微信授权登录
        /// </summary>
        /// <param name="requestDTO"></param>
        /// <returns></returns>
        Results<WXLoginResponseDTO> WXAuthorization(WXAuthorizationRequestDTO requestDTO);
        string SendValidateCode(string openId, string phoneNumber);
        Results BindVehiclePlate(int curUserId, PlateDto plateDto);
        Results<IList<UserToPlateDTO>> GetUserVehiclePlates(int curUserId);
        Results<bool> GetPlateBindStatus(int curUserId);
        Results SetDefaultPlate(int curUserID, DefaultPlateDTO plateIdDTO);
        Results DeletePlate(int curUserID, DefaultPlateDTO plateIdDTO);
        Results ComfirmCode(string openID, ValidateCodeDTO codeDto);
    }
}
